﻿using System;
using System.Collections.Generic;
using System.Text;
using AgilePlannerDT.Data;
using System.Windows.Media;
using System.Windows;
using AgilePlannerDT.Display;
using AgilePlannerDT.Persister;
using AgilePlannerDT.Application.Commands;
using System.Windows.Controls;
using AgilePlannerDT.Display.Impl;

namespace AgilePlannerDT.Application
{
    public interface AgilePlannerApplication
    {
        #region Properties

        bool SendMouseMoveInfoEnabled
        {
            get;
            set;
        }

        DisplayObject ActiveCard
        {
            get;
            set;
        }

        Dictionary<long, DisplayObject> Cards
        {
            get;
            set;
        }

        List<ApCommand> Commands
        {
            get;
        }

        Color DefaultColor
        {
            get;
            set;
        }

        bool IsLoadingPhase
        {
            get;
            set;
        }

        AsynchronousPersister Persister
        {
            get;
        }

        Project Project
        {
            get;
            set;
        }

        DisplayObject SelectedCard
        {
            get;
            set;
        }

        DisplayObject ToolBox
        {
            get;
          //  set;
        }

        //used to determine if voting has been enabled
        bool IsVotingEnabled
        {
            get;
            set;
        }

        #endregion

        #region Functions

        void AddCommand(ApCommand command);

        void BringToFront(DisplayObject sender);

        void Clear();

        void Close();

        IterationDisplayObject CreateIteration(Iteration iteration);

        StoryCardDisplayObject CreateStoryCard(StoryCard storycard);

        void CreateRemoteMouse(MouseMove move);

        Canvas getCanvas();

        void UpdateRemoteMouse(MouseMove move);

        bool isRemoteMouseExisted(MouseMove move);

        void DeleteRemoteMouse(int client);

        DisplayObject Delete();

        DisplayObject Delete(DisplayObject card);

        double GetHeight();

        double GetWidth();

        void Highlight();

        DisplayObject Next();

        DisplayObject Previous();

        bool TryFindIteration(Point p, out IterationDisplayObject value);

        void SynchronizeResizingCard(DisplayObject card, Point p, int touchID);

        void SynchornizeMovingCard(DisplayObject card, Point p, int touchID);

        void ClearVoteDots();

        #endregion

        void HandleMouseMoveLoadedEvent(MouseMove move);
    }
}
